#include<iostream>
#include<string>
#include<cerrno>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

const uint16_t port = 8080;

int main()
{
  //创建套接字
  int sock = socket(AF_INET,SOCK_DGRAM,0);
  
  //2.给该服务器绑定端口和ip
  struct sockaddr_in local;
  //填充字段
  local.sin_family = AF_INET;
  local.sin_port = htons(port);
  //因为这个是服务器，不能只绑定一个ip，如果只绑定一个ip，那么该服务器只能为该ip的主机服务
  //因此，不能指定绑定ip，而是使用INADDR_ANY
  local.sin_addr.s_addr = INADDR_ANY;

  //使用bind绑定
  bind(sock,(struct sockaddr*)&local,sizeof(local));

  //提供服务
  bool quit = false;
  #define NUM 1024
  char buffer[NUM];
  while(!quit)
  {
    struct sockaddr_in peer;//用于保存来自客户端的数据
    socklen_t len = sizeof(peer);
    recvfrom(sock,buffer,sizeof(buffer)-1,0,(struct sockaddr*)&peer,&len);
    std::cout<<"client# "<<buffer<<std::endl;
    std::string echo_hello = "hello,I'm accept";
    sendto(sock,echo_hello.c_str(),echo_hello.size(),0,(struct sockaddr*)&peer,len);
  }

  return 0;
}
